home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include <strings.h>
- #include <sys/param.h>
- #define MAX_PREFIX_LENGTH 6
- #define MAX_FILENAME_LENGTH 70 /* change here for longer filenames */
-
- void main(int argc,char *argv[])
- {
- char filename[MAXPATHLEN+1];
- char from_line[2048];
- char subject_line[2048];
- char copy_filename[MAX_FILENAME_LENGTH+1]; /* max limited for tar */
- char buffer[2048];
- char prefix[MAX_PREFIX_LENGTH+2];
- char from[20];
- char subject[20], subject1[20];
- char reply[20],reply1[20], reply2[20], reply3[20];
- int i,j,subject_length,prefix_length,stop_flag,total,offset,max_length;
- FILE *infile,*outfile;
-
- /* load test header strings, account for missing spaces, etc. */
- sprintf(from, "From:");
- sprintf(subject, "Subject: ");
- sprintf(subject1, "Subject:");
- sprintf(reply, "Subject: Re: ");
- sprintf(reply1, "Subject:Re:");
- sprintf(reply2, "Subject: Re:");
- sprintf(reply3, "Subject:Re: ");
-
- if(argc > 2){ /* check for correct no. of arguments */
- /* get desired prefix for all generated files */
- strcpy(prefix, argv[1]);
-
- for(i=2; i<argc; i++){ /* loop until all files have been processed */
- strcpy(filename, argv[i]);
-
- /* open archived file for reading */
- if((infile = fopen(filename, "r")) != NULL){
- total = 0;
- printf("Successfully opened %s for input...now splitting\n", filename);
- stop_flag = 0;
- fgets(from_line, 2047, infile); /* read first line */
-
- /* continue reading until an error or EOF */
- do{
- copy_filename[0] = '\0'; /* reset filename */
- /* add prefix */
- prefix_length = strlen(prefix);
- for(j=0; j<prefix_length; j++)
- copy_filename[j] = prefix[j];
- copy_filename[j] = '\0'; /* null termination */
- strcat(copy_filename, "_"); /* concatenate underscore */
-
- fgets(subject_line, 2047, infile); /* read subject line */
- subject_length = strlen(subject_line);
-
- /* the test order is important here */
- if(strncmp(subject_line, subject1, 8) == 0){
- offset = 8;
- }
- if(strncmp(subject_line, subject, 9) == 0){
- offset = 9;
- }
- if(strncmp(subject_line, reply2, 12) == 0){
- offset = 12;
- }
- if(strncmp(subject_line, reply, 13) == 0){
- offset = 13;
- }
- if(strncmp(subject_line, reply1, 11) == 0){
- offset = 11;
- }
- if(strncmp(subject_line, reply3, 12) == 0){
- offset = 12;
- }
-
-
- /* replace 'bad' characters with a '_' */
- max_length = MAX_FILENAME_LENGTH- prefix_length+ offset- 1;
- if((subject_length- 1+ prefix_length- offset) < MAX_FILENAME_LENGTH)
- max_length = subject_length-1;
-
- for(j=offset; j<max_length; j++){
- if(subject_line[j] != '.' && subject_line[j] != '[' &&
- subject_line[j] != ']' && subject_line[j] != ' ' &&
- subject_line[j] != '/')
- strncat(copy_filename, &subject_line[j], 1);
- else
- strcat(copy_filename, "_");
- }
-
- /* open an output file with prefix+modified_subject as name */
- /* note this appends to a file with identical subject line */
- outfile = fopen(copy_filename, "a");
- total++;
-
- /* write the from line, subject lines, and content to outfile */
- fputs(from_line, outfile);
- fputs(subject_line, outfile);
-
- for(;;){
- if(fgets(buffer, 2047, infile) != NULL){
- if(strncmp(buffer, from, 5) != 0){
- fputs(buffer, outfile);
- }
- else{
- fclose(outfile);
- strcpy(from_line, buffer);
- break; /* next message found */
- }
- }
- else{
- stop_flag = 1; /* EOF reached */
- fclose(infile);
- printf(" -- %d messages.\n", total);
- break;
- }
- }
- }
- while(stop_flag == 0); /* continue until EOF */
- }
- else{
- printf("Error opening %s for input\n");
- printf(" -- continuing with next file...\n");
- }
- }
- }
- else{
- printf("Form of command:\n");
- printf("splitter prefix filename1 filename2 ...\n");
- printf("(prefix can be up to 6 characters)\n");
- }
- }